package com.kingint.web.sys.service;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * redis操作Service,
 * 对象和数组都以json形式进行存储
 * https://gitee.com/zscat-platform/mall on 2018/8/7.
 */
public interface RedisService {
    /**
     * 存储数据
     */
    void set(String key, String value);

    /**
     * 获取数据
     */
    String get(String key);

    /**
     * 设置超期时间
     */
    boolean expire(String key, long expire);

    /**
     * 删除数据
     */
    void remove(String key);

    /**
     * 自增操作
     *
     * @param delta 自增步长
     */
    Long increment(String key, long delta);
    /**
     * 有序集合添加
     */

    void zAdd(String key, Object value, double scoure);

    /**
     * 获得key数组里面key2元素的排序值
     * @param key
     * @param key2
     * @return
     */
    double score(String key, Object key2);

    /**
     * 从高到低的排序集中获取从头(start)到尾(end)内的元素
     * @param key
     * @param start
     * @param end
     * @return
     */
    Set<String> reverseRange(String key, long start, long end);

    /**
     * 获得key数组里面key2元素的索引
     * @param key
     * @param key2
     * @return
     */
    Long rank(String key, Object key2);
    /**
     * 从左侧插入数据
     * @param key
     * @param value
     * @return
     */
    Long lpush(String key ,String value );

    /**
     * 从左侧取出数据
     * @param key
     * @return
     */
    String lpop(String key );

    /**
     * 从右侧插入数据
     * @param key
     * @param value
     * @return
     */
    Long rpush(String key ,String value );

    /**
     * 从右侧取出数据
     * @param key
     * @return
     */
    String rpop(String key);

    /**
     * 从右侧取出数据
     * @param key
     * @return
     */
    Long llen(String key);

    /**
     * 查看有无数据
     * @return
     */
    List<String> lrang(String key1,Integer start,Integer end);

    /**
     * 取出指定位置的list数据
     * @return
     */
    String lindex(String key1,long index);


    /**
     * 通过hashset存入键值
     * @param key1
     * @param key2
     * @param value
     * @return
     */
    void hset(String key1,String key2,String value);

    /**
     * 获取hash中key2所有的value
     * @param key1
     * @param key2
     */
    String hget(String key1,String key2);

    /**
     * 获取hash中数据为list
     * @param key
     * @return
     */
    List hvalues(String key);

    /**
     * 获取hash中数据为map
     * @param key
     * @return
     */
    Map hentries(String key);

    /**
     * 查看hash中有无key值
     * @param key
     * @return
     */
    Long hexists(String key);

    /**
     * 移除key
     * @param key
     * @return
     */
    Long hremove(String key,Object...key2);

//    /**
//     * 查看key
//     * @param key
//     * @return
//     */
//    Set<Object> hkeys(String key);

}
